home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Info-Mac 3
/
Info_Mac_1994-01.iso
/
Development
/
Source
/
MSG Demo 1.2 Source
/
MSG Demo ƒ
/
MSG Shell ƒ
/
msg menus.c
< prev
next >
Wrap
Text File
|
1993-11-10
|
6KB
|
299 lines
/**********************************************************************\
File: msg menus.c
Purpose: This module handles menu selections, including selection
of dimmed menu items (hehe).
MSG Demo -- graphic effects demonstration program
Copyright (C) 1992-3 Mark Pilgrim & Dave Blumenthal
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program in a file named "GNU General Public License".
If not, write to the Free Software Foundation, 675 Mass Ave,
Cambridge, MA 02139, USA.
\**********************************************************************/
#include "msg menus.h"
#include "msg main.h"
#include "msg graphics.h"
#include "msg sounds.h"
#include "msg environment.h"
#include "demo crash.h"
#include "demo help.h"
#include "demo.h"
extern long menuDisable : 0x0b54;
Boolean gMenuEnabled;
MenuHandle gAppleMenu;
MenuHandle gFileMenu;
MenuHandle gEditMenu;
MenuHandle gWipesMenu;
MenuHandle gAdditionsMenu;
MenuHandle gScrollMenu;
MenuHandle gFluffMenu;
MenuHandle gHelpMenu;
MenuHandle gCrashMenu;
void AdjustMenus(void)
{
WindowPeek theWindow;
int kind;
theWindow = (WindowPeek)FrontWindow();
kind = theWindow ? theWindow->windowKind : 0;
if(kind < 0)
{
EnableItem(gEditMenu, cutItem);
EnableItem(gEditMenu, copyItem);
EnableItem(gEditMenu, pasteItem);
EnableItem(gEditMenu, clearItem);
}
else
{
DisableItem(gEditMenu, cutItem);
DisableItem(gEditMenu, copyItem);
DisableItem(gEditMenu, pasteItem);
DisableItem(gEditMenu, clearItem);
}
if(theWindow)
EnableItem(gFileMenu, closeItem);
else
DisableItem(gFileMenu, closeItem);
if(gMainWindow)
DisableItem(gFileMenu, openItem);
else
EnableItem(gFileMenu, openItem);
if (gDisableQuit)
{
DisableItem(gFileMenu, quitItem);
DisableItem(gFileMenu, disableQuitItem);
EnableItem(gFileMenu, enableQuitItem);
}
else
{
EnableItem(gFileMenu, quitItem);
EnableItem(gFileMenu, disableQuitItem);
DisableItem(gFileMenu, enableQuitItem);
}
if (gLastWipe==-1)
DisableItem(gFluffMenu, repeatItem);
else
EnableItem(gFluffMenu, repeatItem);
CheckItem(gFluffMenu, soundToggle, gSoundToggle&&gSoundAvailable);
if (gSoundAvailable)
EnableItem(gFluffMenu, soundToggle);
else
DisableItem(gFluffMenu, soundToggle);
}
void HandleMenu(long mSelect)
{
int menuID = HiWord(mSelect);
int menuItem = LoWord(mSelect);
if (menuID==0)
{
menuID=HiWord(menuDisable);
menuItem=LoWord(menuDisable);
gMenuEnabled=FALSE;
}
else gMenuEnabled=TRUE;
menuDisable=0L;
switch (menuID)
{
case appleMenu:
HandleAppleMenu(menuItem);
break;
case fileMenu:
HandleFileMenu(menuItem);
break;
case editMenu:
HandleEditMenu(menuItem);
break;
case wipesMenu:
HandleWipesMenu(menuItem);
break;
case additionsMenu:
HandleAdditionsMenu(menuItem);
break;
case scrollMenu:
HandleScrollMenu(menuItem);
break;
case helpMenu:
HandleHelpMenu(menuItem);
break;
case fluffMenu:
HandleFluffMenu(menuItem);
break;
case crashMenu:
HandleCrashMenu(menuItem);
break;
}
}
void HandleAppleMenu(int menuItem)
{
GrafPtr savePort;
Str255 name;
if(menuItem == 1)
ShowInformation();
if (menuItem == 2)
ShowSplashScreen();
else if(menuItem > 4)
{
GetPort(&savePort);
GetItem(gAppleMenu, menuItem, name);
OpenDeskAcc(name);
SetPort(savePort);
}
}
void HandleFileMenu(int menuItem)
{
WindowPtr theWindow;
int i;
switch (menuItem)
{
case openItem:
if (gMenuEnabled)
OpenMainWindow();
else
DoSound(sound_fluff, TRUE);
break;
case closeItem:
if (gMenuEnabled)
{
theWindow=FrontWindow();
for (i=0; i<NUM_HELP; i++)
if (theWindow == gHelp[i])
gHelp[i]=0L;
if(theWindow == gMainWindow)
CloseMainWindow();
else
DisposeWindow(theWindow);
AdjustMenus();
}
else DoSound(sound_fluff, TRUE);
break;
case disableQuitItem:
if (gMenuEnabled)
{
gDisableQuit=TRUE;
AdjustMenus();
}
else DoSound(sound_fluff, TRUE);
break;
case enableQuitItem:
if (gMenuEnabled)
{
gDisableQuit=FALSE;
AdjustMenus();
}
else DoSound(sound_fluff, TRUE);
break;
case quitItem:
gDone = TRUE;
break;
}
}
void HandleEditMenu(int menuItem)
{
if ((menuItem>0) && (menuItem!=2))
{
if (gMenuEnabled)
SystemEdit(menuItem - 1);
else DoSound(sound_fluff, TRUE);
}
}
void HandleWipesMenu(int menuItem)
{
if (gMenuEnabled)
{
gWhichWipe=menuItem;
OpenMainWindow();
}
}
void HandleAdditionsMenu(int menuItem)
{
if (gMenuEnabled)
{
gWhichWipe=menuItem+13;
OpenMainWindow();
}
}
void HandleScrollMenu(int menuItem)
{
if (gMenuEnabled)
{
gWhichWipe=menuItem+24;
OpenMainWindow();
}
}
void HandleHelpMenu(int menuItem)
{
if ((menuItem>0) && (menuItem<=NUM_HELP))
{
OpenHelpWindow(menuItem-1);
SelectWindow(gHelp[menuItem-1]);
}
}
void HandleFluffMenu(int menuItem)
{
switch (menuItem)
{
case repeatItem:
if (gMenuEnabled)
{
gWhichWipe=gLastWipe;
OpenMainWindow();
}
else
DoSound(sound_fluff, TRUE);
break;
case soundToggle:
if (gMenuEnabled)
{
gSoundToggle=!gSoundToggle;
SaveThePrefs();
DoSound(sound_on, TRUE);
}
break;
}
}
void HandleCrashMenu(int menuItem)
{
if (menuItem>0)
CrashAndBurn(menuItem);
}